﻿#include "memo.h"
#include "ui_memo.h"

Memo::Memo(QWidget *parent) :
    BaseEditor(parent),
    ui(new Ui::Memo)
{
    ui->setupUi(this);

    table = TD_TABLE;
    type = T_MEMO;

    model=new QSqlTableModel(this);
    model->setEditStrategy(QSqlTableModel::OnManualSubmit);
    ui->tableView->setModel(model);

    updateView();
    createMenu();
}

Memo::~Memo()
{
    delete ui;
}

void Memo::createMenu()
{
    menu=new QMenu(this);

    menu->addAction(QStringLiteral("查找..."),this,&Memo::search);
    menu->addAction(QStringLiteral("更新"),this,&Memo::updateView);
    menu->addSeparator();
    menu->addAction(QStringLiteral("撤销"),this,&Memo::revert);
    menu->addAction(QStringLiteral("保存"),this,&Memo::save);
    menu->addSeparator();
    menu->addAction(QStringLiteral("删除"),this,&Memo::removeItem);
}

void Memo::updateView()
{
    model->setTable(table);
    model->setFilter(QString("type = '%1'").arg(type));
    model->select();

    ui->tableView->hideColumn(0);       //id
    model->setHeaderData(1,Qt::Horizontal,QStringLiteral("日期"));        //date
    model->setHeaderData(2,Qt::Horizontal,QStringLiteral("备忘"));        //label
    ui->tableView->hideColumn(3); //host
    ui->tableView->hideColumn(4); //type
}

void Memo::showSearchBox(const QString &condition)
{
    QString input=QInputDialog::getText(this,QStringLiteral("输入关键词"),QStringLiteral("关键词"));
    if(!input.isEmpty())
    {
        //把input放在最后可避免自动替换
        QString word=QString("type = '%1' AND %2 like '%%3%'").arg(type).arg(condition).arg(input);
        model->setFilter(word);
        model->select();
    }
}

bool Memo::addItem(const QString &label)
{
    QSqlQuery query;
    query.prepare(QString("insert into %1 (date,label,host,type) values (?,?,?,?)").arg(table));
    query.addBindValue(Env::today);
    query.addBindValue(label);
    query.addBindValue(Env::hostName);
    query.addBindValue(type);
    return query.exec();
}

void Memo::removeItem()
{
    QModelIndex index=ui->tableView->currentIndex();
    if(index.isValid())
    {
        QSqlRecord record=model->record(index.row());
        int id=record.value("id").toInt();
        QString host=getValue(table,"host",id);
        if(host != Env::hostName)
        {
            QMessageBox::warning(this,QStringLiteral("无权操作"),QStringLiteral("您无权操作他人的记录！"));
            return;
        }
        model->removeRow(index.row());
    }
}

void Memo::on_btn_submit_clicked()
{
    QString item=ui->item->text().trimmed();
    if(item.isEmpty())
    {
        QMessageBox::warning(this,QStringLiteral("不能为空"),QStringLiteral("内容不能为空！"));
        return;
    }

    if(addItem(item))
    {
        updateView();
        ui->item->clear();
    }
    else
        QMessageBox::warning(this,QStringLiteral("异常情况"),QStringLiteral("无法提交数据！"));
}
